package com.xz.coursearrange.job;

import com.xz.coursearrange.entity.CoursePlan;
import com.xz.coursearrange.service.CoursePlanService;
import lombok.extern.slf4j.Slf4j;
import org.redisson.api.RList;
import org.redisson.api.RLock;
import org.redisson.api.RedissonClient;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

import javax.annotation.Resource;
import java.util.List;
import java.util.concurrent.TimeUnit;

/**
 * @Description 数据预热 定时任务
 *
 * 弃用
 */
@Slf4j
//@Component
public class PreCacheJob {
    @Resource
    private CoursePlanService coursePlanService;

    @Resource
    private RedissonClient redissonClient;

    // 秒 分 小时
//    @Scheduled(cron = "0 1 11 * * *")
//    public void doCacheRecommendUser() {
//        RLock lock = redissonClient.getLock("course:precachejob:docache:lock");
//        try {
//            // 只有一个线程能获取到锁
//            // waitTime 设置为 0，只抢一次，抢不到就放弃
//            // -1 可以自动续期
//            if (lock.tryLock(0, -1, TimeUnit.MILLISECONDS)) {
//                log.info("getLock: {}", Thread.currentThread().getId());
//
//                // 写缓存 60 秒过期
//                try {
//                    List<CoursePlan> redlist = coursePlanService.redlist();
//
//                    String redisKey = "course:plane:recommend:data";
//
//                    // 使用Redission客户端的opsForList方法操作Redis List
//                    RList<String> rList = redissonClient.getList(redisKey);
//
//                    // 清空原有列表（如果需要保留历史数据，这步可省略）
//                    rList.delete();
//
//                    // 将redlist中的数据逐条右推入Redis List
//                    for (CoursePlan coursePlan : redlist) {
//                        // 假设CoursePlan有toString方法可以转化为存储的字符串
//                        rList.add(coursePlan.toString());
//                    }
//
//                    // 设置键的过期时间，单位：秒
//                    redissonClient.getBucket(redisKey).expire(60, TimeUnit.SECONDS);
//
//                    log.info("Cached data successfully with key: {}", redisKey);
//
//                } catch (Exception e) {
//                    log.error("Error occurred while caching data to Redis", e);
//                }
//            }
//        } catch (InterruptedException e) {
//            log.error("doCacheRecommendUser error", e);
//        } finally {
//            // 只能释放自己的锁
//            // 注意释放锁要写在 finally 中
//            if (lock.isHeldByCurrentThread()) {
//                log.info("unLock: {}", Thread.currentThread().getId());
//                lock.unlock();
//            }
//        }
//    }
}
